#include <stdio.h>

// 定义传感器类型枚举（明确对应整数）
typedef enum {
    TEMPERATURE = 0,  // 温度传感器（0）
    HUMIDITY = 1,     // 湿度传感器（1）
    PRESSURE = 2      // 气压传感器（2）
} SensorType;

// 定义传感器数据联合体（共享内存存储不同类型数据）
union SensorData {
    float temperature;  // 温度（浮点型，单位：℃）
    int humidity;       // 湿度（整数，单位：%，范围0-100）
    float pressure;     // 气压（浮点型，单位：hPa）
};

int main() {
    SensorType sensor_type;       // 当前传感器类型
    union SensorData data;        // 传感器数据存储
    int input_result;             // 用于接收scanf的返回值，判断输入是否有效

    // 1. 提示并获取传感器类型（带输入校验）
    printf("===== 传感器数据采集 =====\n");
    printf("请选择传感器类型：\n");
    printf("  0 - 温度传感器（TEMPERATURE）\n");
    printf("  1 - 湿度传感器（HUMIDITY）\n");
    printf("  2 - 气压传感器（PRESSURE）\n");
    printf("请输入（0/1/2）：");
    
    // 校验输入是否为有效整数
    input_result = scanf("%d", &sensor_type);
    if (input_result != 1 || sensor_type < 0 || sensor_type > 2) {
        printf("输入错误！请输入0、1或2\n");
        return 1;  // 输入无效，退出程序
    }

    // 2. 根据传感器类型获取数据（带输入校验）
    switch (sensor_type) {
        case TEMPERATURE:
            printf("请输入温度值（单位：℃，例如：25.5）：");
            input_result = scanf("%f", &data.temperature);
            if (input_result != 1) {
                printf("温度输入格式错误！\n");
                return 1;
            }
            break;
        
        case HUMIDITY:
            printf("请输入湿度值（单位：%，范围0-100，例如：60）：");
            input_result = scanf("%d", &data.humidity);
            if (input_result != 1) {
                printf("湿度输入格式错误！\n");
                return 1;
            }
            // 湿度范围校验
            if (data.humidity < 0 || data.humidity > 100) {
                printf("警告：湿度值应在0-100范围内！\n");
            }
            break;
        
        case PRESSURE:
            printf("请输入气压值（单位：hPa，例如：1013.25）：");
            input_result = scanf("%f", &data.pressure);
            if (input_result != 1) {
                printf("气压输入格式错误！\n");
                return 1;
            }
            break;
    }

    // 3. 输出传感器数据
    printf("\n===== 传感器数据展示 =====\n");
    switch (sensor_type) {
        case TEMPERATURE:
            printf("温度传感器数据：%.1f ℃\n", data.temperature);
            break;
        case HUMIDITY:
            printf("湿度传感器数据：%d %%\n", data.humidity);
            break;
        case PRESSURE:
            printf("气压传感器数据：%.2f hPa\n", data.pressure);
            break;
    }

    return 0;
}